package com.company.ljh.easy;

import com.company.ljh.utils.ListNode;

/**
 * @description:
 * @projectName:leet_code
 * @see:com.company.ljh.easy
 * @author:ljh
 * @createTime:2022/3/25 9:15
 * @version:1.0
 */
public class 反转链表 {
    //给你单链表的头节点 head ，请你反转链表，并返回反转后的链表。
//
//
//
//
// 示例 1：
//
//
//输入：head = [1,2,3,4,5]
//输出：[5,4,3,2,1]
//
//
// 示例 2：
//
//
//输入：head = [1,2]
//输出：[2,1]
//
//
// 示例 3：
//
//
//输入：head = []
//输出：[]
//
//
//
//
// 提示：
//
//
// 链表中节点的数目范围是 [0, 5000]
// -5000 <= Node.val <= 5000
//
//
//
//
// 进阶：链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题？
//
//
// Related Topics 递归 链表
// 👍 2382 👎 0


//leetcode submit region begin(Prohibit modification and deletion)

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     * int val;
     * ListNode next;
     * ListNode() {}
     * ListNode(int val) { this.val = val; }
     * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
     * }
     */

        public ListNode reverseList(ListNode head) {
            if (head == null){
                return null;
            }
            ListNode lastNode = null;
            ListNode thisNode = head;
            ListNode nextNode = head.next;
            while (thisNode != null) {
                thisNode.next = lastNode;
                lastNode = thisNode;
                thisNode = nextNode;
                if (nextNode != null)
                    nextNode = nextNode.next;

            }
            return lastNode;
        }
    public ListNode reverseList2(ListNode head) {
        ListNode pre = null;
        while(head!=null){
            ListNode temp = head;
            //先保存好next节点，避免丢失
            ListNode next = head.next;
            head.next = pre;
            pre = temp;
            head = next;
        }
        return pre;
    }


}
